'use strict';
//引用模块
var fs = require('fs');
var path = require('path');
var router = require('koa-router')();

//寻找指定路由下的路由文件
function searchController(dir) {
    // 利用文件模块，读取控制器目录下的所有文件
    var files = fs.readdirSync(dir);
    // 筛选真实的路径文件
    var controllerFile = files.filter((name) => {
        return name.endsWith('.js') && name !== 'index.js'

    })
    return controllerFile;
}

//注册给定的路由数组下的所有定义的路由
function registeControllers(file) {
    //遍历每个路径文件
    file.forEach(item => {
        var tmpPath = path.join(__dirname, item);
        // 引入路径文件，准备遍历其暴露的路径定义
        var route = require(tmpPath);
        // 循环定义路由及对应的处理函数
        for (var r in route) {
            // 获取路由定义的类型，是get请求还post请求，分别调用不同的函数来调用
            var type = route[r][0];
            // 获取路由定义中的请求后要调用的函数
            var fn = route[r][1];
            if (type === 'get') {
                router.get(r, fn);
            } else if (type === 'post') {
                router.post(r, fn);
            } else if (type === 'delete') {
                router.detele(r, fn);
            } else if (type === 'put') {
                router.put(r, fn);
            }
        }
    });

}


//暴露

module.exports = function (Dir) {
    // 获得控制器的绝对路径
    var dir = Dir || __dirname;
    // 获得控制器目录下的所有路由文件
    var a = searchController(dir);
    // 注册定义的路由
    registeControllers(a);
    //返回待在app执行的注册函数
    return router.routes();

}